package com.itjin.controller;

import com.itjin.model.domain.dto.DialogDTO;
import com.itjin.model.domain.entity.DialogLog;
import com.itjin.model.domain.vo.EmotionAnalysisVO;
import com.itjin.model.result.Result;
import com.itjin.service.AIanalysisService;
import lombok.extern.slf4j.Slf4j;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.web.bind.annotation.*;

import jakarta.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * AI心理分析控制器
 */
@RestController
@RequestMapping("/ai")
@Tag(name = "AI心理分析控制器")
@Slf4j
public class AIanalysisController {

  @Resource
  private AIanalysisService aiAnalysisService;

  /**
   * 分析用户对话
   * 
   * @param dialogDTO 对话内容 (仅需提供userId和dialogContents，对话类型将由系统自动判断)
   * @return 情绪分析结果
   */
  @PostMapping("/analyze")
  @Operation(summary = "分析用户对话")
  public Result<EmotionAnalysisVO> analyzeDialog(@RequestBody DialogDTO dialogDTO) {
    // 直接调用服务进行分析
    return aiAnalysisService.analyzeDialog(dialogDTO);
  }

  /**
   * 获取用户对话历史记录
   * 
   * @param userId 用户ID
   * @return 对话历史列表
   */
  @GetMapping("/history/{userId}")
  @Operation(summary = "获取用户对话历史记录")
  public Result<List<DialogLog>> getDialogHistory(@PathVariable Integer userId) {
    // 调用服务获取历史记录
    return aiAnalysisService.getUserDialogHistory(userId);
  }

  /**
   * 获取对话详情
   * 
   * @param dialogId 对话ID
   * @return 对话详情
   */
  @GetMapping("/detail/{dialogId}")
  @Operation(summary = "获取对话详情")
  public Result<DialogLog> getDialogDetail(@PathVariable Integer dialogId) {
    // 调用服务获取对话详情
    return aiAnalysisService.getDialogDetail(dialogId);
  }

  /**
   * 获取用户情绪趋势
   * 
   * @param userId 用户ID
   * @param days   天数
   * @return 情绪趋势数据
   */
  @GetMapping("/trend/{userId}")
  @Operation(summary = "获取用户情绪趋势")
  public Result<Map<String, Object>> getEmotionTrend(
      @PathVariable Integer userId,
      @RequestParam(required = false, defaultValue = "7") Integer days) {
    // 调用服务获取情绪趋势
    return aiAnalysisService.getUserEmotionTrend(userId, days);
  }

  /**
   * 删除对话记录
   * 
   * @param dialogId 对话ID
   * @param userId   用户ID
   * @return 删除结果
   */
  @DeleteMapping("/dialog/{dialogId}/{userId}")
  @Operation(summary = "删除对话记录")
  public Result<Boolean> deleteDialog(@PathVariable Integer dialogId, @PathVariable Integer userId) {
    // 调用服务删除对话
    return aiAnalysisService.deleteDialog(dialogId, userId);
  }
}
